<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <script>
            // 递归实现
            let arr1 = [1, 2, 3, [4, 5], [7, [9, 10]]];
            // function flat(arr) {
            //     let result = [];
            //     for (let i = 0; i < arr.length; i++) {
            //         if (Array.isArray(arr[i])) {
            //             result = result.concat(flat(arr[i]));
            //         } else {
            //             result.push(arr[i]);
            //         }
            //     }
            //     return result;
            // }
            // console.log(flat(arr1));

            // 扩展运算符 + some判断数组元素是否还有数组
            // function flat(arr) {
            //     while (arr.some((item) => Array.isArray(item))) {
            //         arr = [].concat(...arr);
            //     }
            //     return arr;
            // }
            // console.log(flat(arr1));

            // 3.reduce
            // function flat(arr) {
            //     return arr.reduce((pre, cur) => {
            //         return pre.concat(Array.isArray(cur) ? flat(cur) : cur);
            //     }, []);
            // }
            // console.log(flat(arr1));

            // 4 Array.toString()直接拍平
            // function flat(arr) {
            //     return arr
            //         .toString()
            //         .split(',')
            //         .map((item) => Number(item));
            // }
            // console.log(flat(arr1));

            // 5.直接使用 flat 拍平 Infinity
            // function flat(arr) {
            //     return arr.flat(Infinity);
            // }

            // 6 JSON字符串序列化＋正则
            function flat(arr) {
                let str = JSON.stringify(arr);
                console.log(str);
                str = str.replace(/(\[|\])/g, '');
                console.log(str);
                str = '[' + str + ']';
                console.log(str);
                return JSON.parse(str);
            }
            console.log(flat(arr1));
        </script>
    </body>
</html>
